import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

/**
 * Date: 2019/2/27
 * Time: 9:29
 * User: Driss.
 * 给电商交易系统中的“订单”排序。订单有两个属性，一个是下单时间，另一个是订单金额。现在有 10 万条订单数据
 * 希望按照金额从小到大对订单数据排序，对于金额相同的订单，我们希望按照下单时间从早到晚有序
 *
 * 思路一：先顺着题目的思路，按照金额给订单排序，然后对于金额相同的订单，按照下单时间排序；
 * 思路而：先按照时间排序，然后使用稳定算法按照金额排序
 */
public class OrderSort {

    //订单条数
    private static final int NUMBER = 100000;

    //订单类
    static class Order{
        private Timestamp ordertime;
        private int payMoney;

        public Order(Timestamp ordertime,int payMoney){
            this.ordertime = ordertime;
            this.payMoney = payMoney;
        }

        public String toString(){
            return "orderTime:" + ordertime.toString() + " payMoney:" + payMoney;
        }
    }

    //生成订单
    public static List<Order> generateOrders(int numbers){

        //随机生成从“2019-02-27 00:00:00”到“2019-02-28 00:00:00”的时间戳
        long begin = Timestamp.valueOf("2019-02-27 00:00:00").getTime();
        long end = Timestamp.valueOf("2019-02-28 00:00:00").getTime();
        long interval = end - begin + 1;

        //生成订单
        ArrayList<Order> orders = new ArrayList<Order>(numbers);
        while(numbers > 0){
            Timestamp randTimeStamp = new Timestamp(begin + (long) (Math.random() * interval));
            int randMoney = 10 + (int)((Math.random()) * 90); //随机生成金额
            orders.add(new Order(randTimeStamp,randMoney));
            numbers--;
        }

        return orders;
    }


    //先按照金额排序，然后按照时间排序
    public static void sort1(List<Order> lists){

        /**
         *  step1：先用快速排序按照金额对订单进行排序
         *  step2：然后使用插入排序按照时间对订单排序
         */


    }

    //先按照排序，然后按照金额排序
    public static void sort2(List<Order> lists){

    }



    public static void main(String[] args) {
        List<Order> orders = generateOrders(100);
        for (Order order : orders) {
            System.out.println(order);
        }
    }

}
